package com.gtxd.utils.converter;

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.gtxd.utils.annotation.MyExclus;

/**
 * YC 2017年8月1日 下午2:39:22
 * <p>
 * Title:手动字段排除策略
 * </p>
 * <p>
 * Description: 用于排除一个类不用转换的字段
 * </p>
 */
public class FieldExclusion implements ExclusionStrategy {
	String[] inStr;

	public FieldExclusion(String[] outStr) {
		this.inStr = outStr;
	}

	/**
	 * 
	 * YC 2017年8月1日 下午2:41:39
	 * <p>
	 * Title: shouldSkipClass
	 * </p>
	 * <p>
	 * Description: 应该排除的类
	 * </p>
	 * 
	 * @param class1
	 * @return
	 * @see com.google.gson.ExclusionStrategy#shouldSkipClass(java.lang.Class)
	 */
	@Override
	public boolean shouldSkipClass(Class<?> class1) {
		return false;
	}

	/**
	 * 
	 * YC 2017年8月1日 下午2:41:57
	 * <p>
	 * Title: shouldSkipField
	 * </p>
	 * <p>
	 * Description: 应该排除的字段
	 * </p>
	 * 
	 * @param fieldattributes
	 * @return
	 * @see com.google.gson.ExclusionStrategy#shouldSkipField(com.google.gson.FieldAttributes)
	 */
	@Override
	public boolean shouldSkipField(FieldAttributes f) {
		boolean flag = false;

		for (int i = 0; i < inStr.length; i++) {
			// 手动排除inStr串指定字段
			if (f.getName().equals(inStr[i])) {
				flag = true;
				System.out.println("排除字段===============>" + f.getName());
			} else {
				// 如果属性带有MyExclus 注解，则排除
				flag = f.getAnnotation(MyExclus.class) != null;
			}
		}

		return flag;
	}

}
